package day100.LC54;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Solution solution = new Solution();
//        int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//        int[][] matrix = {{1, 2, 3,4}, {5, 6,7,8}, {9,10,11,12}};
        int[][] matrix={{6,9,7}};
        List<Integer> arrList = solution.spiralOrder(matrix);
        System.out.println(arrList);

    }
}


class Solution {
    //不对。怎么处理边界条件
    public List<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        int m=matrix.length;//行数
        int n=matrix[0].length;//列数
//        int startX=0;//起始位置
//        int startY=0;
        int i=0;//控制行
        int j=0;//控制列
        int offset=0;//偏移量
        int circulateNum=1;
        boolean flag=false;
        while (circulateNum<=Math.min(m,n)/2+1) {
            flag=false;
            for (; j < n-1-offset; j++) {
                arrayList.add(matrix[i][j]);
                flag=true;
            }
            for (; i < m-1-offset; i++) {
                arrayList.add(matrix[i][j]);
                flag=true;
            }
            for (;j>offset ;j-- ) {
                arrayList.add(matrix[i][j]);
                flag=true;
            }
            for (;i>offset ; i--) {
                flag=true;
                arrayList.add(matrix[i][j]);
            }
            i++;//回溯
            j++;//调整列
//            startX++;
//            startY++;
            offset++;
            circulateNum++;
        }
        if (!flag) {
            i--;//回溯
            j--;//回溯
            arrayList.add(matrix[i][j]);
        }
        return arrayList;
    }
}